package com.sc.admin.service;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sc.admin.common.constant.SysConfigConstants;
import com.sc.admin.common.util.ObjUtils;
import com.sc.admin.common.util.RedisUtils;
import com.sc.admin.mapper.sys.SysConfigMapper;
import com.sc.admin.model.entity.sys.SysConfig;
import com.sc.admin.model.form.SysConfigForm;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 *@Author shen chen
 *@Date 2024-11-28
 */
@Service
@RequiredArgsConstructor
public class SysConfigService extends ServiceImpl<SysConfigMapper, SysConfig> {

    @Cacheable(cacheNames = "sysConfig", key = "#code")
    public boolean getSwitchState(String code) {
        SysConfig config = lambdaQuery().eq(SysConfig::getConfigCode, code).one();
        if (ObjUtils.isEmpty(config)) return false;
        return ObjUtils.equals(config.getConfigSwitch(), SysConfigConstants.SWITCH_OPEN_STATE);
    }

    public Integer saveConfig(SysConfigForm formData) {
        SysConfig config = ObjUtils.copy(formData, SysConfig.class);
        boolean flag = this.save(config);
        return flag ? config.getId() : null;
    }

    @CacheEvict(cacheNames = "sysConfig", key = "#formData.configCode")
    public void updateConfig(Integer id, SysConfigForm formData) {
        SysConfig config = this.getById(id);
        ObjUtils.checkNotNull(config, "配置不存在");

        ObjUtils.copy(formData, config);
        this.updateById(config);
    }

    public void openOrClose(Integer id, String configSwitch) {
        update(new SysConfig().setConfigSwitch(configSwitch), Wrappers.lambdaUpdate(SysConfig.class).eq(SysConfig::getId, id));
        RedisUtils.delete("sysConfig:customer_part_number");
    }
}
